sources <- c("ESPN", "FantasyData", "FantasyPros", "FantasySharks", 
             "Yahoo", "FantasyFootballNerd", "NumberFire",
             "RTSports", "Walterfootball")

scrape <- scrape_data(src = sources,
                      pos = c('QB', 'RB', 'WR', 'TE', 'DST'),
                      season = 2020, 
                      week = week)

Simulation Time!

n_sims <- 10000

tic()
sim_lu <- map_df(1:n_sims, generate_lineup) %>%
  rename(pts_base = points) %>%  
  mutate(position = factor(position, 
                           levels = c("QB", "RB", "WR", "TE", "DST"))) %>% 
  select(lineup, Name, team, position, pts_base, pts_pred, sd_pts, Salary)
toc()
## 314.945 sec elapsed

Results

sim_lu %>%
  filter(lineup<=3) %>%
  arrange(lineup, position, desc(pts_pred)) %>%
  knitr::kable() %>%
  kable_styling() %>%
  column_spec(1, bold=TRUE) %>%
  collapse_rows(columns = 1, valign = 'top')
lineup Name team position pts_base pts_pred sd_pts Salary
1 Patrick Mahomes KCC QB 22.96205 24.290354 1.1503493 9000
Kareem Hunt CLE RB 17.09700 15.815569 0.9473814 7100
Devin Singletary BUF RB 12.91600 14.752455 0.9607248 6200
Antonio Gibson WAS RB 12.88925 13.044585 0.6375180 5700
Davante Adams GBP WR 16.48507 16.716079 0.5453965 8900
Deebo Samuel SFO WR 10.93975 11.691757 0.7561260 5400
Tyler Boyd CIN WR 11.47800 11.499070 0.0563388 6000
George Kittle SFO TE 13.16025 13.285034 0.1245384 7100
Kansas City Chiefs KCC DST 6.75000 8.439378 1.0378200 4600
2 Deshaun Watson HOU QB 22.37560 22.306135 0.8483437 8000
Aaron Jones GBP RB 18.96488 19.302387 1.6130688 8500
Chris Carson SEA RB 14.87009 17.258675 1.7466604 7600
Antonio Gibson WAS RB 12.88925 12.895826 0.6375180 5700
Tyler Lockett SEA WR 12.77411 15.042929 0.9822225 7400
DK Metcalf SEA WR 13.93491 13.865927 0.0293924 7300
Deebo Samuel SFO WR 10.93975 11.727531 0.7561260 5400
George Kittle SFO TE 13.16025 13.194462 0.1245384 7100
New York Jets NYJ DST 5.35500 4.735849 0.7264740 3000
3 Justin Herbert LAC QB 19.11480 21.880537 1.5152172 7500
Aaron Jones GBP RB 18.96488 22.628719 1.6130688 8500
Clyde Edwards-Helaire KCC RB 13.19600 15.238781 1.1052783 7000
James Robinson JAC RB 14.39500 14.400478 0.1408470 6400
Michael Thomas NOS WR 14.57509 16.977092 2.1581801 8600
Tyler Boyd CIN WR 11.47800 11.429921 0.0563388 6000
Deebo Samuel SFO WR 10.93975 10.437611 0.7561260 5400
George Kittle SFO TE 13.16025 13.186566 0.1245384 7100
Atlanta Falcons ATL DST 5.60000 6.029645 0.2965200 3500
ggplotly(sim_lu %>% 
           group_by(Name, position, Salary) %>% 
           dplyr::summarize(lu = n_distinct(lineup)) %>% 
           ungroup() %>% 
           group_by(position) %>% 
           top_n(10, lu) %>% 
           ungroup() %>% 
           arrange(position, desc(lu)) %>% 
           mutate(Name = factor(Name),
                  Name = fct_reorder(Name, lu),
                  pct = round(lu / n_sims, 3) * 100) %>% 
           ggplot(aes(x = Name, y = pct, fill = Salary,
                      text = paste(Name, "in", lu, "lineups with", Salary, "salary"))) +
           geom_bar(stat = "identity") +
           facet_wrap(~position, ncol = 2, scales = "free_y") +
           coord_flip() +
           scale_fill_viridis_c() +
           xlab("") +
           ylab("Lineups (thousands)") +
           ggtitle("Top 10 Players By Position")) %>% 
  ggplotly(tooltip = "text")
plyr_lu <- sim_lu %>%
  group_by(Name, position) %>%
  dplyr::summarize(lu=n_distinct(lineup)) %>%
  ungroup() 

ggplotly(projections %>% 
  filter(avg_type=='weighted') %>%
  mutate(Name = ifelse(pos=="DST", last_name, paste(first_name, last_name))) %>%
  inner_join(fan_duel, by = c("Name", "position")) %>%
  select(Name, team, position, points, Salary, sd_pts) %>%
  left_join(plyr_lu, by='Name') %>%
  replace_na(list(lu=0)) %>%
  mutate(lu_bin=ifelse(lu==0, '0 Lineups', '>=1 Lineups'),
         lu_5=cut(lu,5, labels = FALSE)) %>%
  ggplot(aes(x=Salary, y=points, color=lu_bin, size=sd_pts, text=Name)) +
  geom_point() +
  theme_minimal() +
  scale_color_manual(values = c('red', 'blue'), name="") +
  geom_smooth(inherit.aes = FALSE, aes(x=Salary, y=points), method = 'lm') +
  ylab('Projected Points') +
  xlab('Salary') +
  ggtitle('Who makes it into Optimized Lineups?') +
  scale_x_continuous(labels=scales::dollar))
sim_lu %>%
  group_by(lineup) %>%
  mutate(lineup_pts=sum(pts_pred)) %>%
  group_by(lineup, position) %>%
  mutate(n = n()) %>%
  select(lineup, position, n, lineup_pts) %>%
  distinct() %>%
  spread(key=position, value=n) %>%
  filter(RB >= 2, TE >= 1, WR >= 3) %>%
  mutate(flex = case_when(RB==3 ~ 'RB',
                          TE==2 ~ 'TE',
                          WR==4 ~ 'WR')) %>%
  group_by(flex) %>%
  dplyr::summarize(median_pts = round(median(lineup_pts), 3),
                   cases = n()) %>%
  knitr::kable() %>%
  kable_styling(full_width = FALSE)
flex median_pts cases
RB 132.638 9999
WR 133.024 1
lu_df <- sim_lu %>%
  group_by(lineup) %>%
  dplyr::summarize(lineup_pts=sum(pts_pred),
                   lineup_sd=sum(sd_pts)) %>%
  ungroup()

pto <- psel(lu_df, low(lineup_sd) * high(lineup_pts))


ggplot(lu_df, aes(y=lineup_pts, x=lineup_sd)) +
  geom_point() +
  geom_point(data=pto, size=5) +
  ylab('Lineup Points') +
  xlab('Lineup Points St Dev') +
  ggtitle('Lineup Points vs Uncertainty',
          subtitle = 'Pareto Lineups Bolded')

psel(lu_df, low(lineup_sd) * high(lineup_pts)) %>%
  left_join(sim_lu, by='lineup') %>%
  group_by(lineup) %>%
  arrange(lineup_pts, position, desc(Salary)) %>%
  select(lineup, lineup_pts, lineup_sd, Name, team, position, pts_pred, sd_pts, Salary) %>%
  mutate_at(vars(lineup_pts, lineup_sd, pts_pred, sd_pts), function(x) round(x, 2)) %>%
  knitr::kable() %>%
  kable_styling(fixed_thead = T) %>%
  column_spec(1:3, bold=TRUE) %>%
  collapse_rows(columns = 1:3, valign = 'top') %>%
  scroll_box(height = '700px', width = '100%')
lineup lineup_pts lineup_sd Name team position pts_pred sd_pts Salary
2760 127.94 2.77 Kyler Murray ARI QB 22.07 0.10 8400
Kareem Hunt CLE RB 17.36 0.95 7100
James Robinson JAC RB 14.54 0.14 6400
Jerick McKinnon SFO RB 12.44 0.15 5500
Kenny Golladay DET WR 13.86 0.19 7600
DK Metcalf SEA WR 13.94 0.03 7300
Tyler Boyd CIN WR 11.52 0.06 6000
George Kittle SFO TE 13.44 0.12 7100
Kansas City Chiefs KCC DST 8.77 1.04 4600
5798 128.20 3.09 Russell Wilson SEA QB 23.73 0.52 8700
Alvin Kamara NOS RB 19.68 0.42 9300
James Robinson JAC RB 14.58 0.14 6400
Antonio Gibson WAS RB 12.52 0.64 5700
DK Metcalf SEA WR 13.90 0.03 7300
Robby Anderson CAR WR 12.79 0.44 6400
Tyler Boyd CIN WR 11.50 0.06 6000
George Kittle SFO TE 13.15 0.12 7100
New York Jets NYJ DST 6.35 0.73 3000
2353 132.51 3.30 Kyler Murray ARI QB 22.07 0.10 8400
Alvin Kamara NOS RB 19.86 0.42 9300
Kareem Hunt CLE RB 19.64 0.95 7100
James Robinson JAC RB 14.53 0.14 6400
DK Metcalf SEA WR 13.91 0.03 7300
Tyler Boyd CIN WR 11.54 0.06 6000
Deebo Samuel SFO WR 11.26 0.76 5400
George Kittle SFO TE 13.18 0.12 7100
New York Jets NYJ DST 6.52 0.73 3000
3862 133.10 3.38 Deshaun Watson HOU QB 23.96 0.85 8000
Kareem Hunt CLE RB 19.29 0.95 7100
James Robinson JAC RB 14.35 0.14 6400
Jerick McKinnon SFO RB 12.37 0.15 5500
Davante Adams GBP WR 16.92 0.55 8900
DK Metcalf SEA WR 13.94 0.03 7300
Tyler Boyd CIN WR 11.48 0.06 6000
George Kittle SFO TE 13.44 0.12 7100
Dallas Cowboys DAL DST 7.35 0.54 3700
1269 133.62 3.86 Deshaun Watson HOU QB 24.41 0.85 8000
Derrick Henry TEN RB 18.87 0.42 8900
Kareem Hunt CLE RB 18.04 0.95 7100
James Robinson JAC RB 14.34 0.14 6400
DK Metcalf SEA WR 13.94 0.03 7300
Tyler Boyd CIN WR 11.46 0.06 6000
Deebo Samuel SFO WR 12.30 0.76 5400
George Kittle SFO TE 13.01 0.12 7100
Dallas Cowboys DAL DST 7.25 0.54 3700
9052 133.99 4.47 Deshaun Watson HOU QB 22.62 0.85 8000
Alvin Kamara NOS RB 19.71 0.42 9300
Kareem Hunt CLE RB 19.68 0.95 7100
James Robinson JAC RB 14.57 0.14 6400
DK Metcalf SEA WR 13.96 0.03 7300
Tee Higgins CIN WR 11.29 0.66 5700
Deebo Samuel SFO WR 11.83 0.76 5400
George Kittle SFO TE 13.15 0.12 7100
Dallas Cowboys DAL DST 7.16 0.54 3700
5115 134.60 4.72 Matthew Stafford DET QB 22.21 1.06 7300
Joe Mixon CIN RB 15.67 0.39 7400
Kareem Hunt CLE RB 18.30 0.95 7100
James Robinson JAC RB 14.72 0.14 6400
Davante Adams GBP WR 17.60 0.55 8900
DK Metcalf SEA WR 13.90 0.03 7300
Deebo Samuel SFO WR 13.20 0.76 5400
George Kittle SFO TE 12.93 0.12 7100
New York Jets NYJ DST 6.07 0.73 3000
6653 134.87 5.00 Deshaun Watson HOU QB 22.32 0.85 8000
Joe Mixon CIN RB 16.91 0.39 7400
Kareem Hunt CLE RB 18.49 0.95 7100
Antonio Gibson WAS RB 13.54 0.64 5700
Davante Adams GBP WR 16.93 0.55 8900
DK Metcalf SEA WR 13.99 0.03 7300
Deebo Samuel SFO WR 11.90 0.76 5400
George Kittle SFO TE 13.36 0.12 7100
New York Jets NYJ DST 7.43 0.73 3000
1242 134.92 5.21 Deshaun Watson HOU QB 22.59 0.85 8000
Aaron Jones GBP RB 21.73 1.61 8500
Kareem Hunt CLE RB 18.08 0.95 7100
Jerick McKinnon SFO RB 12.17 0.15 5500
Stefon Diggs BUF WR 14.78 0.71 7500
DK Metcalf SEA WR 13.97 0.03 7300
Tyler Boyd CIN WR 11.48 0.06 6000
George Kittle SFO TE 13.09 0.12 7100
New York Jets NYJ DST 7.04 0.73 3000
5949 135.33 Deshaun Watson HOU QB 23.84 0.85 8000
Aaron Jones GBP RB 22.42 1.61 8500
Kareem Hunt CLE RB 17.63 0.95 7100
James Robinson JAC RB 14.60 0.14 6400
DK Metcalf SEA WR 13.91 0.03 7300
Tyler Boyd CIN WR 11.46 0.06 6000
Deebo Samuel SFO WR 10.58 0.76 5400
George Kittle SFO TE 13.27 0.12 7100
Green Bay Packers GBP DST 7.61 0.70 4000
6042 136.48 5.25 Deshaun Watson HOU QB 23.51 0.85 8000
Kareem Hunt CLE RB 19.76 0.95 7100
James Robinson JAC RB 14.53 0.14 6400
Antonio Gibson WAS RB 14.02 0.64 5700
Davante Adams GBP WR 17.57 0.55 8900
Stefon Diggs BUF WR 14.44 0.71 7500
Deebo Samuel SFO WR 11.40 0.76 5400
George Kittle SFO TE 13.42 0.12 7100
Dallas Cowboys DAL DST 7.84 0.54 3700
5172 137.16 5.61 Deshaun Watson HOU QB 22.78 0.85 8000
Aaron Jones GBP RB 21.71 1.61 8500
Kareem Hunt CLE RB 18.65 0.95 7100
James Robinson JAC RB 14.68 0.14 6400
Stefon Diggs BUF WR 15.64 0.71 7500
Robby Anderson CAR WR 12.94 0.44 6400
Tyler Boyd CIN WR 11.33 0.06 6000
George Kittle SFO TE 13.41 0.12 7100
New York Jets NYJ DST 6.02 0.73 3000
3975 137.53 5.74 Deshaun Watson HOU QB 23.60 0.85 8000
Aaron Jones GBP RB 21.75 1.61 8500
Kareem Hunt CLE RB 17.82 0.95 7100
James Robinson JAC RB 14.71 0.14 6400
Stefon Diggs BUF WR 15.20 0.71 7500
Tyler Boyd CIN WR 11.63 0.06 6000
Deebo Samuel SFO WR 12.29 0.76 5400
George Kittle SFO TE 13.19 0.12 7100
Dallas Cowboys DAL DST 7.34 0.54 3700
8119 137.99 6.11 Deshaun Watson HOU QB 24.58 0.85 8000
Aaron Jones GBP RB 21.50 1.61 8500
Kareem Hunt CLE RB 18.24 0.95 7100
James Robinson JAC RB 14.49 0.14 6400
Stefon Diggs BUF WR 15.07 0.71 7500
CeeDee Lamb DAL WR 11.89 0.43 6200
Deebo Samuel SFO WR 12.33 0.76 5400
George Kittle SFO TE 13.06 0.12 7100
Dallas Cowboys DAL DST 6.83 0.54 3700
4664 138.03 6.58 Deshaun Watson HOU QB 23.46 0.85 8000
Chris Carson SEA RB 20.36 1.75 7600
Kareem Hunt CLE RB 19.03 0.95 7100
Antonio Gibson WAS RB 13.37 0.64 5700
Davante Adams GBP WR 17.01 0.55 8900
Robby Anderson CAR WR 12.91 0.44 6400
Deebo Samuel SFO WR 10.98 0.76 5400
George Kittle SFO TE 13.33 0.12 7100
Dallas Cowboys DAL DST 7.57 0.54 3700
7124 138.05 6.72 Josh Allen BUF QB 30.24 2.69 8800
Alvin Kamara NOS RB 19.46 0.42 9300
Kareem Hunt CLE RB 18.07 0.95 7100
James Robinson JAC RB 14.46 0.14 6400
Robby Anderson CAR WR 12.46 0.44 6400
Tee Higgins CIN WR 11.92 0.66 5700
Deebo Samuel SFO WR 11.67 0.76 5400
George Kittle SFO TE 13.29 0.12 7100
Dallas Cowboys DAL DST 6.48 0.54 3700
6798 139.31 6.78 Deshaun Watson HOU QB 23.71 0.85 8000
Aaron Jones GBP RB 23.39 1.61 8500
Joe Mixon CIN RB 16.10 0.39 7400
Kareem Hunt CLE RB 17.03 0.95 7100
Stefon Diggs BUF WR 14.88 0.71 7500
Tee Higgins CIN WR 12.45 0.66 5700
Deebo Samuel SFO WR 11.55 0.76 5400
George Kittle SFO TE 13.27 0.12 7100
New York Jets NYJ DST 6.93 0.73 3000
5133 140.27 7.02 Deshaun Watson HOU QB 23.82 0.85 8000
Aaron Jones GBP RB 22.02 1.61 8500
Kareem Hunt CLE RB 17.88 0.95 7100
Antonio Gibson WAS RB 14.34 0.64 5700
Davante Adams GBP WR 17.49 0.55 8900
Tee Higgins CIN WR 12.21 0.66 5700
Deebo Samuel SFO WR 12.80 0.76 5400
George Kittle SFO TE 13.35 0.12 7100
Cincinnati Bengals CIN DST 6.36 0.89 3600
4070 140.84 7.73 Patrick Mahomes KCC QB 25.26 1.15 9000
Aaron Jones GBP RB 25.96 1.61 8500
Kareem Hunt CLE RB 17.59 0.95 7100
James Robinson JAC RB 14.36 0.14 6400
DK Metcalf SEA WR 13.90 0.03 7300
Mecole Hardman KCC WR 12.32 2.43 5400
Deebo Samuel SFO WR 10.54 0.76 5400
George Kittle SFO TE 13.13 0.12 7100
Dallas Cowboys DAL DST 7.79 0.54 3700
8240 144.55 7.85 Josh Allen BUF QB 33.10 2.69 8800
Aaron Jones GBP RB 21.43 1.61 8500
Kareem Hunt CLE RB 18.19 0.95 7100
James Robinson JAC RB 14.62 0.14 6400
DK Metcalf SEA WR 13.89 0.03 7300
Tee Higgins CIN WR 10.69 0.66 5700
Deebo Samuel SFO WR 12.45 0.76 5400
George Kittle SFO TE 13.23 0.12 7100
Cincinnati Bengals CIN DST 6.94 0.89 3600
8006 146.75 13.45 Joe Flacco NYJ QB 34.27 9.26 6500
Kareem Hunt CLE RB 18.71 0.95 7100
James Robinson JAC RB 14.62 0.14 6400
Devin Singletary BUF RB 15.07 0.96 6200
Davante Adams GBP WR 16.51 0.55 8900
Stefon Diggs BUF WR 14.23 0.71 7500
DK Metcalf SEA WR 13.91 0.03 7300
George Kittle SFO TE 13.19 0.12 7100
New York Jets NYJ DST 6.25 0.73 3000
5432 146.87 13.69 Joe Flacco NYJ QB 35.46 9.26 6500
Joe Mixon CIN RB 16.33 0.39 7400
Kareem Hunt CLE RB 17.92 0.95 7100
James Robinson JAC RB 14.70 0.14 6400
Davante Adams GBP WR 16.99 0.55 8900
Tyler Lockett SEA WR 14.22 0.98 7400
Deebo Samuel SFO WR 11.09 0.76 5400
George Kittle SFO TE 13.14 0.12 7100
Dallas Cowboys DAL DST 7.01 0.54 3700
9095 148.11 14.07 Joe Flacco NYJ QB 35.16 9.26 6500
Alvin Kamara NOS RB 19.63 0.42 9300
Kareem Hunt CLE RB 18.31 0.95 7100
Antonio Gibson WAS RB 13.60 0.64 5700
Tyreek Hill KCC WR 14.87 0.48 8000
Stefon Diggs BUF WR 15.20 0.71 7500
Deebo Samuel SFO WR 12.25 0.76 5400
George Kittle SFO TE 13.10 0.12 7100
New York Jets NYJ DST 6.00 0.73 3000
2258 148.77 14.48 Joe Flacco NYJ QB 36.90 9.26 6500
Alvin Kamara NOS RB 19.57 0.42 9300
Aaron Jones GBP RB 19.25 1.61 8500
Kareem Hunt CLE RB 17.33 0.95 7100
DK Metcalf SEA WR 13.97 0.03 7300
Deebo Samuel SFO WR 11.75 0.76 5400
Randall Cobb HOU WR 10.24 0.78 5100
George Kittle SFO TE 13.05 0.12 7100
Dallas Cowboys DAL DST 6.71 0.54 3700
9138 150.42 15.12 Joe Flacco NYJ QB 37.10 9.26 6500
Aaron Jones GBP RB 18.52 1.61 8500
Kareem Hunt CLE RB 18.30 0.95 7100
Antonio Gibson WAS RB 13.99 0.64 5700
Stefon Diggs BUF WR 14.76 0.71 7500
DK Metcalf SEA WR 13.93 0.03 7300
Deebo Samuel SFO WR 11.65 0.76 5400
George Kittle SFO TE 13.23 0.12 7100
Kansas City Chiefs KCC DST 8.94 1.04 4600
2237 151.60 17.10 Joe Flacco NYJ QB 32.02 9.26 6500
Aaron Jones GBP RB 20.97 1.61 8500
Kareem Hunt CLE RB 17.52 0.95 7100
Antonio Gibson WAS RB 13.10 0.64 5700
Michael Thomas NOS WR 21.20 2.16 8600
Stefon Diggs BUF WR 14.94 0.71 7500
Deebo Samuel SFO WR 11.01 0.76 5400
George Kittle SFO TE 13.17 0.12 7100
Cincinnati Bengals CIN DST 7.67 0.89 3600
8177 156.94 18.63 Joe Flacco NYJ QB 41.53 9.26 6500
Aaron Jones GBP RB 22.06 1.61 8500
Kareem Hunt CLE RB 17.44 0.95 7100
Devin Singletary BUF RB 14.90 0.96 6200
Michael Thomas NOS WR 17.16 2.16 8600
Stefon Diggs BUF WR 14.33 0.71 7500
Dede Westbrook JAC WR 9.62 2.57 4500
George Kittle SFO TE 13.06 0.12 7100
New Orleans Saints NOS DST 6.84 0.28 4000